﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using service_desk_blred.Utils;
using MySql.Data.MySqlClient;
using System.Web.Mvc;

namespace service_desk_blred.Models
{
    #region Models
    public class ChamadoModel
    {
        [DisplayName("Número de Identificação")]
        public int IdChamado { get; set; }

        [DisplayName("Usuário de Abertura")]
        public UsuarioModel UsuarioAbertura { get; set; }

        [DisplayName("Usuário Solicitante")]
        public UsuarioModel UsuarioSolicitante { get; set; }

        public CliassificacaoModel Classificacao { get; set; }

        [Required(ErrorMessage = "O Campo Assunto é obrigatório!")]
        [DisplayName("Assunto")]
        public String Assunto { get; set; }

        [Required(ErrorMessage = "O Campo Descricao é obrigatório!")]
        [DisplayName("Descricao")]
        public String Descricao { get; set; }

        [DisplayName("Data de Abertura")]
        [DataType(DataType.DateTime)]
        public DateTime DataAbertura { get; set; }

        [DisplayName("Data de Encerramento")]
        [DataType(DataType.DateTime)]
        public DateTime DataEncerramento { get; set; }

        //Campo ListaCargos será utilizado para popular a view de Registro de um Analista
        public List<SelectListItem> ListaSolicitantes { get; set; }

    }

    public class CliassificacaoModel
    {

        [Required(ErrorMessage = "O Campo Classificacao é obrigatório!")]
        public int IdClassificacao { get; set; }

        [Required(ErrorMessage = "O Campo Classificacao é obrigatório!")]
        [DisplayName("Tipo Classificação")]
        public String NomeClassificao { get; set; }

        public Boolean PermiteVinculo { get; set; }

        public int IdPaiClassificacao { get; set; }

        public List<SelectListItem> ListaClassificacao { get; set; }

    }


    #endregion


    #region Service


    public class ChamadoService
    {

        public ResponseInfo RecuperarTodasClassificacoes()
        {
            String command = "SELECT * FROM classificacao";

            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = command;

            MySqlConnection conn = DataBase.createConnection();
            conn.Open();
            cmd.Connection = conn;

            using (MySqlDataReader dr = cmd.ExecuteReader())
            {
                List<CliassificacaoModel> classificacoes = new List<CliassificacaoModel>();

                while (dr.Read())
                {
                    CliassificacaoModel model = new CliassificacaoModel();

                    model.IdClassificacao = dr.GetInt32("ID_CLASSIFICACAO");
                    model.NomeClassificao = dr.GetString("NOME_CLASSIFICACAO");
                    model.PermiteVinculo = dr.GetBoolean("PERMITI_VINCULO");
                    model.IdPaiClassificacao = dr.IsDBNull(3) ? 0 : dr.GetInt32("PAI_ID_CLASSIFICACAO");

                    classificacoes.Add(model);
                }

                DataBase.closeConnection(conn);

                return new ResponseInfo(ResponseEntity.Sucesso, "", classificacoes);
            }

        }

        public ResponseInfo recuperarClassificacaoPorId(int id)
        {
            String command = "SELECT * FROM classificacao WHERE ID_CLASSIFICACAO = @idClassificacao ";


            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = command;
            cmd.Parameters.AddWithValue("@idClassificacao", id);

            MySqlConnection conn = DataBase.createConnection();
            conn.Open();
            cmd.Connection = conn;

            using (MySqlDataReader dr = cmd.ExecuteReader())
            {

                CliassificacaoModel model = new CliassificacaoModel();

                while (dr.Read())
                {
                    model.IdClassificacao = dr.GetInt32("ID_CLASSIFICACAO");
                    model.NomeClassificao = dr.GetString("NOME_CLASSIFICACAO");
                    model.PermiteVinculo = dr.GetBoolean("PERMITI_VINCULO");
                    model.IdPaiClassificacao = dr.IsDBNull(3) ? 0 : dr.GetInt32("PAI_ID_CLASSIFICACAO");

                    break;
                }

                DataBase.closeConnection(conn);

                return new ResponseInfo(ResponseEntity.Sucesso, "", model);
            }

        }










    }

    #endregion
}